/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.com.gestionstock.controleur;

import edu.com.gestionstock.bean.Livres;
import edu.com.gestionstock.bean.Dvd;
import edu.com.gestionstock.dao.DAO;
import edu.com.gestionstock.dao.bo.DvdDAO;
import edu.com.gestionstock.dao.bo.LivresDAO;
import edu.com.gestionstock.vue.PanneauAfficheStock;

import java.awt.BorderLayout;
import java.util.ArrayList;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

/**
 *
 * @author Gratien
 */
public class ControleurAfficheStock implements ActionListener
{

    private PanneauAfficheStock fenetreStock;
    private Dvd dvd = new Dvd();
    private Livres livre = new Livres();

    public ControleurAfficheStock(PanneauAfficheStock fenetreStock)
    {
        this.fenetreStock = fenetreStock;
        setControleurFenetre(this);
        init();
    }

    public void actionPerformed(ActionEvent e)
    {
        Object source = e.getSource();

    }

    public void setControleurFenetre(ActionListener listener)
    {
    }

    public void init()
    {

        //On créer les objets DAO
        DAO<Dvd> DvdDao = new DvdDAO();
        ArrayList<Dvd> arrDvd = new ArrayList<Dvd>();

        DAO<Livres> LvDao = new LivresDAO();
        ArrayList<Livres> arrLivre = new ArrayList<Livres>();

        //On utilise la methode DAO pour recupérer les listes de Dvd et Livres qui correspondent aux criteres de recherche
        arrDvd = DvdDao.findList("");
        arrLivre = LvDao.findList("");

        //On envoi le resultat dans le tableau d'affichage du stock
        this.afficheStock(arrLivre, arrDvd);
        
        /*
        //TEST
        this.ajoutLigne("5", "Test Livre", "Roman", "Livre", "10", "", "Machin Truc");
        this.ajoutLigne("8", "Test Dvd2", "Fiction", "DVD", "0", "jdfklsjdfs, skdfmlsk", "Robert");
        this.ajoutLigne("6", "Test Dvd", "Policier", "DVD", "2", "Machin, Chose, Bidule", "Truc");
        * */
    }

    public void afficheStock(ArrayList<Livres> arrLivres, ArrayList<Dvd> arrDvd)
    {
        //Des 2 arraylist, on va en faire 1 seule arraylist de string

        //ArrayList qui va contenir chaque ligne du tableau
        ArrayList<String[]> arrData = new ArrayList<String[]>();

        //On parcours l'arraylist de livres, on fera ensuite celui des dvd
        //Pour chaque objet Livres contenu dans l'ArrayList arrLivres on extrait l'objet qu'on stock dans "livre"
        for ( Livres livre : arrLivres )
        {
            //On convertit le livre en tableau de string pour le stocker dans l'ArrayListe globale
            arrData.add(livre.toTableString());
        }

        //On fait la même chose pour l'ArrayList de DVD
        for ( Dvd dvd : arrDvd )
        {
            //On convertit le livre en tableau de string pour le stocker dans l'ArrayListe globale
            arrData.add(dvd.toTableString());
        }

        //TODO: On pourrait ajouter un tri du tableau

        //On vide le contenu du tableau avant d'envoyer le nouveau contenu
        this.videStock();

        //On envoi l'ArrayList contenant toutes les données au panneau d'affichage du stock
        this.ajoutList(arrData);
    }

    public void videStock()
    {
        //setRowCount permet de redefinir le nombre de ligne dans le tableau
        //Si la valeur est inférieure au nombre de ligne du tableau alors les lignes sont supprimées
        //Ce qui revient à vider le tableau !
        this.fenetreStock.getModele().setRowCount(0);
    }

    //TODO: il faudrait ajouter une methode permettant d'ajouter tout un stock via un vecteur de materiel
    public void ajoutDvd(Dvd dvd)
    {
        this.fenetreStock.getModele().addRow(dvd.toTableString());
    }

    public void ajoutLivre(Livres livre)
    {
        this.fenetreStock.getModele().addRow(livre.toTableString());
    }

    public void ajoutLigne(String id, String titre, String genre, String type, String nombre, String acteur, String realisateur)
    {
        this.fenetreStock.getModele().addRow(new String[]
                {
                    id,
                    titre,
                    genre,
                    type,
                    nombre,
                    acteur,
                    realisateur
                });
    }

    //On envoi directement une ligne complete sous forme de tableau de string
    public void ajoutTableauLigne(String[] ligne)
    {
        this.fenetreStock.getModele().addRow(ligne);
    }

    //On passe un ArrayList pour completer tout le tableau d'un coup
    public void ajoutList(ArrayList<String[]> arrList)
    {
        for ( String[] ligne : arrList )
        {
            //On convertit le livre en tableau de string pour le stocker dans l'ArrayListe globale
            this.fenetreStock.getModele().addRow(ligne);
        }
    }

    public void setStockVisible(boolean val)
    {
        this.fenetreStock.setVisible(val);
    }
}
